<?php
class ImportExcelForm extends Form
{
	function ImportExcelForm()
	{
		Form::Form('ImportExcelForm');
		
		$censor = Url::get('censor',1);
		
		CGlobal::$website_title = 'Cập nhật/Thêm sản phẩm từ Excel';
	}

	function on_submit()
	{
		$start_row = 6;
		//$start_row = 4;
		
		if (isset($_FILES['file_excel']) && $_FILES['file_excel']['error']==0)
		{
			
			$file_ext	=AZLib::getExtension($_FILES['file_excel']['name']);
					
			if($file_ext == '.xls')
			{
				require_once 'includes/excel/PHPExcel_1.7.6/PHPExcel/IOFactory.php';

				try 
				{
					$objPHPExcel = PHPExcel_IOFactory::load($_FILES['file_excel']['tmp_name']);
				}
				catch (Exception $e)
				{
					$this->setFormError('','File bạn nhập không đúng định dạng');
				}
			}
			else 
			{
				$this->setFormError('','File bạn nhập không đúng định dạng');
			}
		}
		else
		{
			$this->setFormError('',"Bạn chưa chọn file Excel!");
		}
		
		
		$sku_arr			=	array();//B Col 1
		$category_id_arr	=	array();//C Col 2
		$brand_arr			=	array();//D Col 3
		$name_arr			=	array();//E Col 4
		$quantity_arr		=	array();//F Col 5 - Số lượng
		$made_in_arr		=	array();//G Col 6
		$warranty_arr		=	array();//H Col 7
		$price_arr			=	array();//I Col 8
		$price_out_arr		=	array();//J Col 9
		
		$currency_id_arr	=	array();//Q Col 16
		$offer_arr			=	array();//R Col 17
		
		$status_arr			=	array();//S Col 18
		
		$list_brief_arr		=	array();//T Col 19
		$description_arr	=	array();//U Col 20
		$brief_arr			=	array();//V Col 21
		##########################################################################################################
		#Check lỗi:
		$error		=	'';
		
		$worksheet = $objPHPExcel->getSheetByName('Sản phẩm');
		
		if(!$worksheet)
		{
			$this->setFormError('','Tên sheet gốc đã bị thay đổi, hãy đổi lại tên sheet thành "Sản phẩm"');
		}
		
		$brand_name_ars 	= array();
		
		$not_allow_update = array();
		$not_allow_insert = array();
		
		if(!$this->errNum)
		{
			if($worksheet->getCell("Z1")->getValue() != 2)
			{
				$this->setFormError('','File excel không đúng phiên bản, đề nghị <a href="import_excel.html?cmd=download" style="color:#0000FF"><b>Tải về file Excel mẫu</b></a> mới nhất và cập nhật lại!');
				return ;
			}
			
			$max_rows =  $worksheet->getHighestRow();
		
			for($i = $start_row; $i <= $max_rows; $i++) 
			{
				$sku = trim(str_replace(array("'","\""),'',$worksheet->getCell("B$i")->getValue()));
				
				if($sku == '')
				{
					//$error	.=	"<b>SKU</b> tại Cell <font color='#f00'>B$i</font> không được để trống<br/>";
					$not_allow_update[$i] = $i;//Không cho  update
					$not_allow_insert[$i] = $i;//Không cho insert
				}
				else
				{
					$sku_arr[$i]= $sku;
					
					$catid		= trim($worksheet->getCell("C$i")->getValue());
				
					if($catid)
					{
						if(!isset(CGlobal::$allCategories[$catid]))
						{
							//$error	.=	"<b>ID Danh mục</b> tại Cell <font color='#f00'>C$i</font> không tồn tại<br/>";
							
							$not_allow_update[$i] = $i;//Không cho  update
							$not_allow_insert[$i] = $i;//Không cho insert
						}
					}
					
					$category_id_arr[$i] = $catid;
					
					$brand_arr[$i] = trim($worksheet->getCell("D$i")->getValue());
					
					if($brand_arr[$i] != '')
					{
						$brand_name_ars[strtolower($brand_arr[$i])] = str_replace(array("'","\""),'',$brand_arr[$i]);
					}
					
					$name_arr[$i] 		= trim($worksheet->getCell("E$i")->getValue());
					
					if($name_arr[$i] == '')
					{
						//$error	.=	"<b>Tên sản phẩm</b> tại Cell <font color='#f00'>C$i</font> không được để trống<br/>";
						
						$not_allow_insert[$i] = $i;//Không cho insert
					}
					elseif(strlen($name_arr[$i]) < 2)
					{
						//$error	.=	"<b>Tên sản phẩm</b> tại Cell <font color='#f00'>C$i</font> không được để trống<br/>";
						$not_allow_update[$i] = $i;//Không cho  update
						$not_allow_insert[$i] = $i;//Không cho insert
					}
					
					$quantity_arr[$i] 	= abs($worksheet->getCell("F$i")->getValue());
					$made_in_arr[$i] 	= $worksheet->getCell("G$i")->getValue();
					$warranty_arr[$i] 	= $worksheet->getCell("H$i")->getValue();
					
					$price_arr[$i] 		= abs($worksheet->getCell("I$i")->getValue());
					$price_out_arr[$i] 	= abs($worksheet->getCell("J$i")->getValue());
					
					if($price_out_arr[$i] && $price_out_arr[$i] < $price_arr[$i])
					{
						//$error	.=	"<b>Giá thị trường</b> tại Cell <font color='#f00'>J$i</font> phải lớn hơn hoặc bằng <b>Giá niêm yết</b> tại Cell <font color='#f00'>I$i</font><br/>";
						
						$not_allow_update[$i] = $i;//Không cho  update
						$not_allow_insert[$i] = $i;//Không cho insert	
					}
					
					$currency_id_arr[$i] 	= (strtolower($worksheet->getCell("Q$i")->getValue()) == 'usd') ? 2 : 1;
					$offer_arr[$i] 			= $worksheet->getCell("R$i")->getValue();
					
					/*$list_brief_arr[$i] 	= str_replace("/","<br />",$worksheet->getCell("S$i")->getValue());
					$brief_arr[$i] 			= str_replace("/","<br />",$worksheet->getCell("T$i")->getValue());
					$description_arr[$i] 	= str_replace("/","<br />",$worksheet->getCell("U$i")->getValue());
					*/
					$list_brief_arr[$i] 	= trim($worksheet->getCell("T$i")->getValue());
					
					$description_arr[$i] 	= trim($worksheet->getCell("U$i")->getValue());
					
					$brief_arr[$i] 			= trim($worksheet->getCell("V$i")->getValue());
					
					if($list_brief_arr[$i] == '')
					{
						//$error	.=	"<b>Thông số tóm tắt</b> tại Cell <font color='#f00'>S$i</font> không được để trống!<br/>";	
						
						$not_allow_insert[$i] = $i;//Không cho insert	
					}
					elseif(strlen($list_brief_arr[$i]) < 2)
					{
						$not_allow_update[$i] = $i;//Không cho  update
						$not_allow_insert[$i] = $i;//Không cho insert
					}
					
					if($description_arr[$i] == '')
					{
						//$error	.=	"<b>Thông số tóm tắt</b> tại Cell <font color='#f00'>S$i</font> không được để trống!<br/>";	
						
						$not_allow_insert[$i] = $i;//Không cho insert	
					}
					elseif(strlen($description_arr[$i]) < 2)
					{
						$not_allow_update[$i] = $i;//Không cho  update
						$not_allow_insert[$i] = $i;//Không cho insert
					}
					
					if($brief_arr[$i] == '')
					{
						//$error	.=	"<b>Thông số tóm tắt</b> tại Cell <font color='#f00'>S$i</font> không được để trống!<br/>";	
						
						$not_allow_insert[$i] = $i;//Không cho insert	
					}
					elseif(strlen($brief_arr[$i]) < 2)
					{
						$not_allow_update[$i] = $i;//Không cho  update
						$not_allow_insert[$i] = $i;//Không cho insert
					}
					
					/*
					if($brief_arr[$i] == '')
					{
						$brief_arr[$i] = $list_brief_arr[$i];
					}
					
					if($description_arr[$i] == '')
					{
						$description_arr[$i] = $brief_arr[$i];
					}
					*/
					
					$status_arr[$i] 		= trim($worksheet->getCell("S$i")->getValue());
					
					if($status_arr[$i] != '')
					{
						if(in_array($status_arr[$i],array(-1,1,2)))
						{
							$status_arr[$i] = 1;
						}
					}
				}
			}
			#Check lỗi
			##########################################################################################################
			
			$success = '';
			
			//if($error == '')//Ko có lỗi j!
			{
				if(!$name_arr)
				{
					$this->setFormError('',"Bạn chưa nhập thông tin sản phẩm nào!");
					return;
				}
				
				$all_sku_items 		= array();
				
				$sku_str = "'" . implode("','",$sku_arr) . "'";
				
				$re = DB::query("SELECT id, sku FROM item WHERE sku IN($sku_str)");
					
				if($re)
				{
					while ($item = mysql_fetch_assoc($re))
					{
						$all_sku_items[$item['sku']] = $item['id'];
					}
				}
				
				$all_rands 			= array();
				
				if($brand_name_ars)
				{
					$brand_str = "'" . implode("','",$brand_name_ars) . "'";
					
					$re = DB::query("SELECT * FROM brand WHERE name IN($brand_str)");
					
					if($re)
					{
						while ($brand = mysql_fetch_assoc($re))
						{
							$all_rands[strtolower(trim($brand['name']))] = $brand['id'];
						}
					}
				}
				
				$total_update	= 0;
				$total_add		= 0;
				$total_skip		= 0;
				
				foreach ($name_arr as $key => $nam)
				{
					if(!isset($not_allow_update[$key] , $not_allow_insert[$key]))
					{
						if(isset($all_sku_items[$sku_arr[$key]]))//Update
						{
							if(!isset($not_allow_update[$key]))
							{
								$item_update_row = array(
														'status' 			=> 1,
														
														'modify_time'		=>TIME_NOW,
														'modify_user_name'	=>User::user_name(),
													 );
										 
								if($category_id_arr[$key] != '')//Nếu cập nhật Danh mục
								{
									$catid 		= $category_id_arr[$key];
									$cattopid 	= $catid;
									$catl2id 	= $catid;
									
									$cat 		= CGlobal::$allCategories[$catid];
									
									if($cat)
									{
										if($cat['parent_id'] && isset(CGlobal::$allCategories[$cat['parent_id']]))//Cấp 2 hoặc cấp 3
										{
											$pcat = CGlobal::$allCategories[$cat['parent_id']];
											
											if($pcat['parent_id'] && isset(CGlobal::$allCategories[$pcat['parent_id']]))//cấp 3
											{
												$cattopid 	= $pcat['parent_id'];
												$catl2id 	= $pcat['id'];
											}
											else{//Cấp 2
												$cattopid 	= $cat['parent_id'];
												$catl2id 	= $cat['id'];
											}
										}
										else//Cấp 1
										{				
											$cattopid 	= $catid;
											$catl2id 	= 0;
										}
									}
									
									$item_update_row['level_1_catid'] = $cattopid;
									$item_update_row['level_2_catid'] = $catl2id;
									$item_update_row['category_id'] = $catid;
								}
								
								if($brand_arr[$key] != '')
								{
									$brand_id = 0;
									
									if(isset($all_rands[strtolower($brand_arr[$key])]))
									{
										$brand_id = $all_rands[strtolower($brand_arr[$key])];
									}
									elseif($brand_arr[$key] != '-')
									{
										$brand_id = DB::insert('brand',array(
																				'name' =>$brand_arr[$key]
																				));
																				
										$all_rands[strtolower($brand_arr[$key])] = 	$brand_id;								
									}
									
									$item_update_row['brand_id'] = $brand_id;
								}
								
								if($name_arr[$key] != '')
								{
									$item_update_row['name'] = $name_arr[$key];
								}
								
								if($list_brief_arr[$key] != '')
								{
									$item_update_row['list_brief'] = $list_brief_arr[$key];
								}
								
								if($brief_arr[$key] != '')
								{
									$item_update_row['brief'] = $brief_arr[$key];
								}
								
								if($description_arr[$key] != '')
								{
									$item_update_row['description'] = $description_arr[$key];
								}
								
								if($quantity_arr[$key] != '')
								{
									$item_update_row['quantity'] = (int)$quantity_arr[$key];
								}
								
								if($made_in_arr[$key] != '')
								{
									if($made_in_arr[$key] == '-')
									{
										$item_update_row['made_in'] = '';
									}
									else
									{
										$item_update_row['made_in'] = (int)$made_in_arr[$key];	
									}
								}
								
								if($warranty_arr[$key] != '')
								{
									if($warranty_arr[$key] == '-')
									{
										$item_update_row['warranty'] = '';
									}
									else
									{
										$item_update_row['warranty'] = (int)$warranty_arr[$key];	
									}
								}
								
								if($price_arr[$key] != '')
								{
									if($price_arr[$key] == '-')
									{
										$item_update_row['price'] = 0;
									}
									else
									{
										$item_update_row['price'] = (int)$price_arr[$key];	
									}
								}
								
								if($price_out_arr[$key] != '')
								{
									if($price_out_arr[$key] == '-')
									{
										$item_update_row['price_out'] = 0;
									}
									else
									{
										$item_update_row['price_out'] = (int)$price_out_arr[$key];	
									}
								}
								
								if($currency_id_arr[$key] != '')
								{
									if($currency_id_arr[$key] == '-')
									{
										$item_update_row['currency_id'] = 1;
									}
									else
									{
										$item_update_row['currency_id'] = (int)$currency_id_arr[$key];	
									}
								}
								
								if($offer_arr[$key] != '')
								{
									if($offer_arr[$key] == '-')
									{
										$item_update_row['offer'] = '';
									}
									else
									{
										$item_update_row['offer'] = $offer_arr[$key];	
									}
								}
								
								if($status_arr[$key] != '')
								{
									if($status_arr[$key] == '-')
									{
										$item_update_row['status'] = 1;
									}
									else
									{
										$item_update_row['status'] = (int)$status_arr[$key];	
									}
								}
								
								$id = $all_sku_items[$sku_arr[$key]];		 
								
								DB::update('item',$item_update_row, "id={$id}");
							
								Item::get_item($id,1);
								$total_update++;
								
								$success .= "<a href='p$id.html' target='_blank'>[ ID: $id ]</a> Cập nhật thành công sp ở dòng thứ $key<br />";
							}
							else
							{
								$total_skip++;
							}
						}
						else
						{
							if(!isset($not_allow_insert[$key]))
							{
								$catid 		= $category_id_arr[$key];
								$cattopid 	= $catid;
								$catl2id 	= $catid;
								
								$cat 		= CGlobal::$allCategories[$catid];
								
								if($cat)
								{
									if($cat['parent_id'] && isset(CGlobal::$allCategories[$cat['parent_id']]))//Cấp 2 hoặc cấp 3
									{
										$pcat = CGlobal::$allCategories[$cat['parent_id']];
										
										if($pcat['parent_id'] && isset(CGlobal::$allCategories[$pcat['parent_id']]))//cấp 3
										{
											$cattopid 	= $pcat['parent_id'];
											$catl2id 	= $pcat['id'];
										}
										else{//Cấp 2
											$cattopid 	= $cat['parent_id'];
											$catl2id 	= $cat['id'];
										}
									}
									else//Cấp 1
									{				
										$cattopid 	= $catid;
										$catl2id 	= 0;
									}
								}
								
								$brand_id = 0;
								
								
								if($brand_arr[$key] != '')
								{
									if(isset($all_rands[strtolower($brand_arr[$key])]))
									{
										$brand_id = $all_rands[strtolower($brand_arr[$key])];
									}
									elseif($brand_arr[$key] != '-')
									{
										$brand_id = DB::insert('brand',array(
																				'name' =>$brand_arr[$key]
																				));
																				
										$all_rands[strtolower($brand_arr[$key])] = 	$brand_id;								
									}
								}
								
								if($status_arr[$key] == '')
								{
									$status_arr[$key] = 1;
								}
								
								$item_insert_row = array(
															'sku' 				=> $sku_arr[$key],
															'category_id' 		=> $catid,
															'level_1_catid' 	=> $cattopid,
															'level_2_catid' 	=> $catl2id,
															
															'brand_id' 			=> $brand_id,
															
															'name' 				=> $name_arr[$key],
															'list_brief' 		=> $list_brief_arr[$key],
															'brief' 			=> $brief_arr[$key],
															'description' 		=> $description_arr[$key],
															
															'quantity' 			=> $quantity_arr[$key],
															'made_in' 			=> $made_in_arr[$key],
															'warranty' 			=> $warranty_arr[$key],
															
															'price' 			=> $price_arr[$key],
															'price_out' 		=> $price_out_arr[$key],
															'currency_id' 		=> $currency_id_arr[$key],
															
															'offer' 			=> $offer_arr[$key],
															'offer' 			=> $offer_arr[$key],
															
															'status' 			=> $status_arr[$key],
															
															'created_time'		=>TIME_NOW,
															'user_id'			=>ser::id(),
															'user_name'			=>ser::user_name(),
															
															'modify_time'		=>TIME_NOW,
															'modify_user_name'	=>User::user_name(),
														 );
													 
								$id = DB::insert('item',$item_insert_row);
								
								$total_add++;
								
								$success .= "<a href='p$id.html' target='_blank'><font color=red>[ ID: $id ]</font></a> Thêm mới thành công sp ở dòng thứ $key<br />";
							}
							else
							{
								$total_skip++;
							}
						}
					}
					else
					{
						$total_skip++;
					}
				}
			}
			
			if($success != '')
			{
				$success = "Tạo mới: $total_add, Cập nhật: $total_update, Bỏ qua: $total_skip.<br /><br />". $success;
				
				$this->setFormSucces('',$success);
			}
		}
	}

	function draw()
	{
		global $display;
		
		AZLib::getCats();

		$display->add('msg',$this->showFormErrorMessages(1));
		$display->add('msgs',$this->showFormSuccesMessages(1));
		
		$this->beginForm(true,'post',false,Url::build_current());
		$display->output('ImportExcel');
		$this->endForm();				
	}
}
?>